#include <iostream>
using namespace std;

/*
    C++新增两个关键字：
    new：申请堆空间
    delete：释放堆空间
       情况1：如果你申请的是1个类型大小的堆空间，delete不需要使用[]
       情况2：如果你申请的是多个类型大小的堆空间，delete需要使用[]

    malloc和new有什么区别
       区别1：malloc是个库函数，new是关键字
       区别2：free释放，delete释放


    p = new T[len];  分配数组
    p = new T();     分配单个对象
*/

int main()
{
    int *p1 = new int; //    int *p = (int *)malloc(sizeof(int));
    *p1 = 10;
    cout << *p1 << endl;
    delete p1;

    int *p = new int(10); //    int *p = (int *)malloc(10 * sizeof(int));
    *p = 20;
    *(p + 1) = 30;
    p[2] = 40;

    cout << *p << endl;
    cout << *(p + 1) << endl;
    cout << p[2] << endl;

    delete[] p;

    // 笔试题迷惑的一种写法
    int *p2 = new int(50); // 等价于 int *p2 = (int *)malloc(sizeof(int));  *p2 = 50;
    cout << *p2 << endl;
    delete p2;

    return 0;
}
